#include <stdio.h>   
#include <stdlib.h>   
#include <string.h>   

char name[64];   
char pass[64];  
  
char* getcgidata(FILE* fp, char* requestmethod)   
{   
	char* input;   
	int len;   
	int size = 1024;   
	int i = 0;   
	
	//判断两个字符串是否相等 strcmp(s1,s2) 。相等时返回0，所以要取反。
	if (!strcmp(requestmethod, "GET"))   {   
		 input = getenv("QUERY_STRING");   
		 return input;   
	}   
	else if (!strcmp(requestmethod, "POST"))   {   
		 len = atoi(getenv("CONTENT_LENGTH"));   
		 input = (char*)malloc(sizeof(char)*(size + 1));   
		
		 // 空数据
		 if (len == 0)   {   
			input[0] = '\0';   
			return input;   
		 }   
		   
		 while(1)   
		 {   
			// 从标准输入逐字符读取
			input[i] = (char)fgetc(fp);  
			// 缓冲区已满 
			if (i == size)   {   
				 input[i+1] = '\0';   
				 return input;   
			}   										  
			--len;   
			// 数据读完或达到 CONTENT_LENGTH
			if (feof(fp) || (!(len)))   {   
				 i++;   
				 input[i] = '\0';   
				 return input;   
			}   
			i++;   
						  
		 }   
	}   
	return NULL;  
}	

void unencode_for_name_pass(char *input)
{
	int i = 0;   
	int j = 0;   
	
	// 我们获取的input字符串可能像如下的形式   
	// Username="admin"&Password="aaaaa"   
	// 其中"Username="和"&Password="都是固定的   
	// 而"admin"和"aaaaa"都是变化的，也是我们要获取的   
		  
	// 前面9个字符是UserName=   
	// 在"UserName="和"&"之间的是我们要取出来的用户名   	
	for ( i = 9; i < (int)strlen(input); i++ )  {   
		 if (input[i] == '&')   {   
			name[j] = '\0';   
			break;   
		 }                                       
		 name[j++] = input[i];   
	}   
   
	// 前面9个字符 + "&Password="10个字符 + Username的字符数   
	// 是我们不要的，故省略掉，不拷贝   
	for ( i = 19 + strlen(name), j = 0; i < (int)strlen(input); i++ ){   
		 pass[j++] = input[i];   
	}   
	pass[j] = '\0';   	
		
	if((strcmp(name,"Romeo") == 0)&&(strcmp(pass,"123") == 0))
	{
		printf("<script language='javascript'>document.location = 'http://192.168.124.20/choose.html'</script>"); //自动跳转到这个页面	
	}
	else{
		printf("用户名或密码错误<br><br>");  
		//exit(-1);
	}
}

int main()   
{   
	char *input;   
	char *req_method;   
 
	// CGI（通用网关接口）程序中必须输出的 HTTP 响应头，用于告诉浏览器返回的内容类型是 HTML
	// 浏览器行为：收到该头部后，会将后续输出解析为 HTML（而非纯文本、图片等）。
	// 是 CGI 程序与浏览器通信的“协议开关”，确保内容被正确解析为 HTML。
	printf("Content-type: text/html\n\n"); 
	printf("The following is query reuslt:<br><br>");   

	req_method = getenv("REQUEST_METHOD");   
	input = getcgidata(stdin, req_method);   //获取URL 编码的数据
	
	unencode_for_name_pass(input);   //解码，并判断用户名，密码,如果正确，跳转至选择仓库界面，否则提示错误	
	return 0;   
}   
   
			
